#数据提取
#jsonpath 、xpath helper插件 、 xpath语法 、lxml模块

#一、jsonpath
'''
1.jsonpath模块提取数据的方法：

from jsonpath import jsonpath

ret = jsonpath(a,'jsonpath语法规则字符串')


2.安装jsonpath模块: pip install jsonpath

'''

#案例--拉勾网json数案例

#找到拉勾网数据网页，如：lagou.com/lbs/getAllCitySearchLabels.json
#打开开发者工具，刷新network-->找到*.json下面的header项下的URL
"""
import json
import requests
from jsonpath import jsonpath

url = 'https://www.lagou.com/lbs/getAllCitySearchLabels.json'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

res1 = requests.get(url,headers=headers)
#print(res1.text)   #json格式

#把json格式的字符串转换成python对象
res2 = json.loads(res1.text)
print(type(res2))

#获取所有的name
city_name = jsonpath(res2,'$..name')
#print(city_name)

#获取某个节点的name
c = jsonpath(res2,'$..A[*].name')
#print(c)

"""


#案例二 --获取豆瓣网单页数据
'''
1.单开豆瓣网站的目标页面，如选电影->动画分类
2.F12打开开发者工具，分析network中分析数据，找到目标数据包
3.复制Request url

'''

"""
import requests
import json
from jsonpath import jsonpath

url = 'https://qzs.gdtimg.com/union/res/pc/ylh-pc-ad-sdk.v1.1.6.js'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

res = requests.get(url,headers=headers)
#print(res.text)

#提取电影名

#把json格式的字符串转成python对象
res2 = json.loads(res.text)
#print(res2)
print(type(res2))

#1.通过键值对取值
result = res2['subjects'][0]['title']
print(result)

#2.用jsonpath()取值
res3 = jsonpath(res2,'$..title')
print(res3)
"""


#人工智能修改后的代码

import requests
import json
from jsonpath_ng import jsonpath, parse

# 假设这是一个返回JSON数据的URL
url = 'https://qzs.gdtimg.com/union/res/pc/ylh-pc-ad-sdk.v1.1.6.js'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

res = requests.get(url, headers=headers)

# 检查响应状态码
if res.status_code == 200:
    # 把json格式的字符串转成python对象
    res2 = res.json()  # 使用.json()方法直接解析JSON响应
    print(type(res2))

    # 1. 通过键值对取值（假设JSON结构中有'subjects'和'title'）
    try:
        result = res2['subjects'][0]['title']
        print(result)
    except KeyError:
        print("KeyError: 'subjects' or 'title' not found in JSON response.")

    # 2. 用jsonpath()取值
    jsonpath_expr = parse('$..title')
    res3 = [match.value for match in jsonpath_expr.find(res2)]
    print(res3)
else:
    print(f"Failed to retrieve data: Status code {res.status_code}")

